/**
 * @file	Effect.h
 * @author  Thomas Fu <thomas.ks.fu@gmail.com>
 * @version 1.0
 *
 * @section LICENSE
 *
 * This program is propety of The SOSS and may not be used by any 
 * individual for any purpose at any time without express permission from 
 * Mike Casey, Thomas Fu, Chris Hairfield, Kyle Lamson, Ben Treweek, or Cliff 
 * Warren.
 *
 * @brief
 * This abstract class serves as a general super class for all sound processing 
 * effects.
 *
 * @class Effect
 */

#ifndef _effect_h
#define _effect_h

class Effect
{
	
public: 
	
	/**
	 * Virtual function that, in the non-abstract Effect subclasses, will be 
	 * responsible for filling the output buffer with data based on the data in
	 * the input buffer.
	 *
	 * @param outputBuffer The buffer of data to be written to the output of the 
	 * program (currently the speakers of the computer)
	 *
	 * @param inputBuffer The buffer of data read from the input to the program
	 * (either the line-in port or the built-in microphone)
	 *
	 * @param data A variable containing a pointer to any other data needed for this
	 * function (including a pointer to any callback functions needed for audio 
	 * processing and any data required by these functions)
	 *
	 * @return An integer encoding information about the successful execution of 
	 * this function. A zero indicates successful execution with no problems.
	 */
	virtual int processSound(void *outputBuffer, void *inputBuffer, 
													 void *data) = 0;
};

#endif